<?php

namespace app\api\controller;

use think\Controller;
use think\Db;

/**
 * 自动执行脚本
 * @author Administrator
 */
class Crontab extends Controller
{

    /**
     * 测试crontab
     */
	public function test()
	{
		file_put_contents('../runtime/test.txt', date('Y-m-d H:i:s') . "\n", FILE_APPEND);
		exit();
	}

    /**
     * 检测已发货产品是否超过15天未确认收货（无售后）
     * 系统自动将超时订单修改为已确认收货状态
     */
	public function deliver_goods_15() {
		Db::startTrans();
		try {
			// 获取所有状态为  已发货或者物流已签收   并且售后状态   为未申请或者已完成的订单的订单
			$orders = model('order')->all(['status' => ['in', '5, 99'], 'after_sale_status' => ['in', '0, 2']]);
			
			foreach ($orders as $v) {
			    // 获取发货时间
                $consignment_time = $v['consignment_time'];
			    if ($v->after_sale_status == 2) {
			        // 有售后   时间从最后一次售后完成时间开始算
                    $after_sale = $v->orderAfterSale()->order('id desc')->find();
                    $consignment_time = $after_sale['member_affirm_time'];
                }

                // 当前时间减去检测时间   小于15天  跳过
//				if (time() - $consignment_time < 15 * 24 * 60 * 60) {
//					// 跳过
//					continue;
//				}

				// 修改订单信息  更新状态和时间
                model('order')->save(['status' => 6, 'receipt_time' => time()], ['id' => $v->id]);
			}
			// 提交事务
			Db::commit();
		} catch (\Exception $e) {
			// 回滚事务
			Db::rollback();
			$this->error_crontab_remind('检测已发货产品是否超过15天未确认收货,定时脚本出错', $e->getMessage());
		}
	}

    /**
     * 检测已确认收货订单7天售后期
     * 系统将自动将超时订单修改为已完成状态，并且进行分账结算
     */
    public function confirm_receipt_7() {
        Db::startTrans();
        try {
            // 获取所有状态为  已发货或者物流已签收   并且售后状态   为未申请或者已完成的订单的订单
            $orders = model('order')->all(['status' => 6, 'after_sale_status' => ['in', '0, 2']]);

            foreach ($orders as $v) {
                // 获取发货时间
                $consignment_time = $v['receipt_time'];
                if ($v->after_sale_status == 2) {
                    // 有售后   时间从最后一次售后完成时间开始算
                    $after_sale = $v->orderAfterSale()->order('id desc')->find();
                    $consignment_time = $after_sale['member_affirm_time'];
                }

                // 当前时间减去检测时间   小于7天  跳过
//                if (time() - $consignment_time < 7 * 24 * 60 * 60) {
//                    // 跳过
//                    continue;
//                }

                // 修改订单信息  更新状态和时间
                model('order')->save(['status' => 7, 'finish_time' => time()], ['id' => $v->id]);

                // 分账
                $sub_account = \app\api\service\Order::sub_account($v->id);
                if ($sub_account['code'] == 0) {
                    throw new \Exception('分账错误:' . $sub_account['msg']);
                }
            }
            // 提交事务
            Db::commit();
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();
            $this->error_crontab_remind('检测已确认收货订单7天售后期,定时脚本出错', $e->getMessage());
        }
    }

    /**
     * 检查售后订单
     * 售后订单流程
        4.1 用户申请
        4.2 平台受理（定价，价格可为0）或拒绝
        4.3 如果售后费用大于0，用户支付，如果费用为0，跳过此步骤
        4.4 用户寄回商品，并填写物流信息
        4.5 平台确认收货
        4.6 平台处理完成，寄回商品
        4.7 用户确认完成
        检查频率 一小时一次
        用户申请未受理或拒绝的订单，按检查频率每小时通知一次客服
        平台处理完成并寄回商品后，7天内用户未确认完成的订单将自动完成
     */
    public function order_after_sale() {
        Db::startTrans();
        try {
            // 获取所有状态为  已发货或者物流已签收   并且售后状态   为未申请或者已完成的订单的订单
            $order_after_sale = model('order_after_sale')->all(['status' => ['in', '1, 6']]);

            foreach ($order_after_sale as $v) {
                if ($v->status == 1) {
                    // 发送微信模板消息
                    $data = ['touser' => 'o_WIcwccOaW-UdBrgeyDofcw5qO4',
                        'template_id' => '-wjkS0vN_NOaiYY6biMRlySepDiPxzUu3TfcFb5FQnk',
                        'topcolor' => '#FF0000',
                        'data' =>
                            [
                                'first' => ['value' => '售后单提醒',"color" => "#173177"],
                                'keyword1' => ['value' => '发现新的售后单',"color" => "#173177"],
                                'keyword2' => ['value' => date('Y-m-d H:i:s'),"color" => "#173177"],
                                'remark' => ['value' => '售后单号：' . $v->aftermarket_sn,"color" => "#173177"]
                            ]
                    ];
                    send_msg($data);
                } else {
                    // 当前时间减去检测时间   小于7天  跳过
                    if (time() - $v->terrace_deliver_goods_time < 7 * 24 * 60 * 60) {
                        // 跳过
                        continue;
                    }

                    // 修改售后单信息  更新状态和时间
                    model('order_after_sale')->save(['status' => 7, 'member_affirm_time' => time()], ['id' => $v->id]);

                    // 更新订单售后状态为完成
                    model('order')->save(['after_sale_status' => 2], ['id' => $v->order_id]);
                }
            }
            // 提交事务
            Db::commit();
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();
            $this->error_crontab_remind('检测已确认收货订单7天售后期,定时脚本出错', $e->getMessage());
        }
    }

    /**
     * 发送错误提醒
     * @param $title
     * @param $msg
     */
	public function error_crontab_remind($title, $msg)
	{
		// 发送微信模板消息
		$data = ['touser' => 'o_WIcwccOaW-UdBrgeyDofcw5qO4',
            'template_id' => '-wjkS0vN_NOaiYY6biMRlySepDiPxzUu3TfcFb5FQnk',
            'topcolor' => '#FF0000',
            'data' =>
                [
                    'first' => ['value' => '错误通知',"color" => "#173177"],
                    'keyword1' => ['value' => $title,"color" => "#173177"],
                    'keyword2' => ['value' => date('Y-m-d H:i:s'),"color" => "#173177"],
                    'remark' => ['value' => $msg,"color" => "#173177"]
                ]
        ];
		send_msg($data);
	}
}
